/* 
  ts项目一般会卡一点 => 因为实时检查你的代码数据类型 => 底层会开一个检查服务(占用电脑内存)

  1. vscode自带的检查服务(关闭成功的标识=>右下角多一个托管模式takeover)
  2. volar插件带一个检查服务
*/

import { createApp } from 'vue'

import App from './App.vue'
import router from './router'
import pinia from './stores'

// 样式全局使用
import 'vant/lib/index.css'
// 便于覆盖
import './styles/main.scss'

// 导入svg插件
import 'virtual:svg-icons-register'

// 测试
// import { request } from './utils/request'

// request<{
//   account: string
//   avatar: string
//   id: string
//   mobile: string
//   refreshToken: string
//   token: string
// }>('/login/password', 'POST', {
//   mobile: '13230000001',
//   password: 'abc12345'
// }).then((res) => {
//   console.log(res.data.token)
// })

// 获取验证码
// request<{
//   code: string
// }>('/code', 'GET', {
//   mobile: '13230000003',
//   type: 'login'
// }).then((res) => {
//   console.log(res.data.code)
// })

const app = createApp(App)

app.use(pinia)
app.use(router)

app.mount('#app')

/* 
  Pick(选择)  Omit(排除) ts内置类型

  基于已有类型提供新类型
*/

// type Obj = {
//   name: string
//   age: number
//   desc: string
// }

// type Obj2 = {
//   name: string
//   age: number
// }
// type Obj2 = Omit<Obj, 'desc' | 'name'>

// type Obj3 = Pick<Obj, 'desc' | 'name'>

/* 
  字面量 联合类型 => 解决一组可选值问题 => 大部分情况好用 少数情况(纯数字的联合)不好用 不清晰不直观没语义

  枚举: 解决纯数字联合类型 不直观

    enum 类型名 { 一个个可选值 }
    不仅可以作为类型 还可以利用 枚举类型.名字 获取对应的值
    既能是类型  也能是值 => 必须在ts文件中定义 不能在d.ts中定义!!!
*/

enum Gender {
  Nan = 1,
  Nv = 0
}

let gender: Gender
gender = Gender.Nan
gender = Gender.Nv
console.log(gender)

// type D = '上' | '下' | '左' | '右'
// let direction: D
// direction = '下'
// direction = '上'

// let gender: 0 | 1
// gender = 0
// gender = 1

// type T1 = 1 | 2 | 3
enum T1 {
  Doc = 1,
  Fast = 2,
  Medicine = 3
}
let type: T1 = T1.Doc
type = T1.Fast
type = T1.Medicine
console.log(type)

// type D2 = 0 | 1 | 2 | 3
enum D2 {
  Up = 0,
  Down = 1,
  Left = 2,
  Right = 3
}

let direction: D2
direction = D2.Down
direction = D2.Left
direction = D2.Up
direction = D2.Right
console.log(direction)
